package com.hspedu.furns.service.impl;

import com.hspedu.furns.dao.FurnDAO;
import com.hspedu.furns.dao.impl.FurnDAOImpl;
import com.hspedu.furns.entity.Furn;
import com.hspedu.furns.entity.Page;
import com.hspedu.furns.service.FurnService;

import java.util.List;

/**
 * @author 徐
 * @version 1.0
 */
public class FurnServiceImpl implements FurnService {
    //定义DAO属性
    private FurnDAO furnDAO = new FurnDAOImpl();


    /**
     * 返回家居信息列表
     * @return
     */
    @Override
    public List<Furn> queryFurns() {
        return furnDAO.queryFurns();
    }

    /**
     * 添加家居
     * @param furn
     * @return
     */
    @Override
    public int addFurn(Furn furn) {
        return furnDAO.addFurn(furn);
    }

    /**
     * 删除家居
     * @param id
     * @return
     */
    @Override
    public int deleteFurnById(Integer id) {
        return furnDAO.deleteFurnById(id);
    }

    /**
     * 查询家居信息依据id
     * @param id
     * @return
     */
    @Override
    public Furn queryFurnById(Integer id) {
        return furnDAO.queryFurnById(id);
    }

    /**
     * 修改家居信息
     * @param furn
     * @return
     */
    @Override
    public int updateFurn(Furn furn) {
        return furnDAO.updateFurn(furn);
    }

    /**
     * 根据传入的参数,返回对应的Page对象
     * @param pageNo
     * @param pageSize
     * @return
     */
    @Override
    public Page<Furn> page(int pageNo, int pageSize) {
        //先创建一个Page对象,然后根据实际情况填充属性
        Page<Furn> page = new Page<>();
        //给属性赋值
        page.setPageNo(pageNo);
        page.setPageSize(pageSize);
        int totalRow = furnDAO.getTotalRow();
        page.setTotalRow(totalRow);
        //pageTotalCount 总页码数,根据计算得出
        int pageTotalCount = totalRow / pageSize;
        //比如 6 2  =》  6 / 2 = 3
        //比如 5 2  =》  5 / 2 = 2
        if (totalRow % pageSize > 0){
            pageTotalCount += 1;
        }
        page.setPageTotalCount(pageTotalCount);

        //获取items, 开始计算begin
        //验证: pageNo = 1 pageSize = 3 => begin =0
        //验证: pageNo = 3 pageSize = 2 => begin =4
        //OK => 但是注意这里隐藏一个坑, 现在你看不到, 后面会暴露
        int begin = (pageNo - 1) * pageSize;
        List<Furn> pageItems = furnDAO.getPageItems(begin, pageSize);
        //初始化参数
        page.setItems(pageItems);
        //差一个url
        return page;
    }

    /**
     * 通过查询名称来分页显示
     * 根据传入的参数,返回对应的Page对象
     * @param pageNo
     * @param pageSize
     * @param name
     * @return
     */
    @Override
    public Page<Furn> pageByName(int pageNo, int pageSize, String name) {
        //先创建一个Page对象,然后根据实际情况填充属性
        Page<Furn> page = new Page<>();
        //给属性赋值
        page.setPageNo(pageNo);//页码号
        page.setPageSize(pageSize);//每页显示数量
        int totalRow = furnDAO.getTotalRowByName(name);
        page.setTotalRow(totalRow);//家居总数
        //pageTotalCount 总页码数,根据计算得出
        int pageTotalCount = totalRow / pageSize;

        if (totalRow % pageSize > 0){
            pageTotalCount += 1;
        }
        page.setPageTotalCount(pageTotalCount);

        //获取items, 开始计算begin
        //OK => 但是注意这里隐藏一个坑, 现在你看不到, 后面会暴露
        int begin = (pageNo - 1) * pageSize;
        List<Furn> pageItems = furnDAO.getPageItemsByName(begin,pageSize,name);
        //初始化参数
        page.setItems(pageItems);//每个页码中显示的家居
        return page;
    }

    /**
     * 根据id返回家居的图片路径
     * 用于当修改图片时，删除老的家居图片信息
     * @param id
     * @return
     */
    @Override
    public String getFurnImgPath(Integer id) {
        return furnDAO.getFurnImgPath(id);
    }
}
